<?php

    /**
     *增/删/改
     * @param $link mysql object
     * @param $sql  sql语句
     * @return bool|int|string 添加返回自增id,删除和修改返回bool
     */
    function execute ($link,$sql)
    {
        //执行sql语句
        $result = mysqli_query($link, $sql);
        //处理结果集
        if($result){
            //如果是插入语句,返回自增id
            if(mysqli_insert_id($link) > 0){
                return mysqli_insert_id($link);
            }else{
                //删除和修改时返回true;
                return true;
            }
        }else{
            //失败返回false;
            return false;
        }
    }

    /**
     * 查询多条记录
     * @param $link mysql object
     * @param $sql sql语句
     * @return array|bool|null 返回查询的结果,一个二维数组; 失败返回false;
     */
    function query ($link,$sql)
    {
        //执行sql语句
        $result = mysqli_query($link, $sql);
        //处理结果集
        if($result){
            $arr = array();
            //把查到的数组放到$arr中
            $arr = mysqli_fetch_all($result,MYSQLI_ASSOC);
            //释放结果集
            mysqli_free_result($result);

            return $arr;
        }else{
            //失败返回false;
            return false;
        }
    }

    /**
     * 查询一条数据
     * @param $link mysql object
     * @param $sql sql语句
     * @return array|bool|null 返回查询的结果,一个一维数组; 失败返回false;
     */
    function getRow ($link,$sql)
    {
        //执行sql语句
        $result = mysqli_query($link, $sql);
        //处理结果集
        if($result){
            $arr = array();
            //把查到的数组放到$arr中
            $arr = mysqli_fetch_assoc($result);
            //释放结果集
            mysqli_free_result($result);

            return $arr;
        }else{
            //失败返回false;
            return false;
        }
    }


    /**
     * 前台跳转页面
     * @param string $msg 提示信息
     * @param int $t 时间
     * @param string $url 跳转的地址
     */
    function redirect ($msg = '', $t = 3, $url = '')
    {
        if($url == ''){
            $url = $_SERVER['HTTP_REFERER'];
        }
        require ROOT_PATH . "com/redirect.php";
    }

    /**
     * 后台跳转页面
     * @param string $msg 提示信息
     * @param int $t 时间
     * @param string $url 跳转的地址
     */
    function admin_redirect ($msg = '', $t = 3, $url = '')
    {
        if($url == ''){
            $url = $_SERVER['HTTP_REFERER'];
        }
        require ADMIN_ROOT_PATH . "redirect.php";
    }

    /**
     * 分页
     * @param $link 资源
     * @param $url 要跳转的地址部分
     * @param $table_name 要操作的表名
     * @param $field_name 要显示的字段名
     * @return mixed    返回一个数组
     */
    function paging($link,$url,$table_name,$field_name){
        //分页查找跳转的地址
        $url = $url;
        $arr['url'] = $url;

        $name = '';
        $where = '';
        $urlname = '';
        if(isset($_GET['name']) && !empty($_GET['name'])){
            $name = $_GET['name'];
            $where = " where name like '%$name%'";
            $urlname = "&name=$name";
        }
        $arr['name'] = $name; //搜索时用到的用用户名模糊搜索
        $arr['where'] = $where; //搜索时的where条件拼接
        $arr['urlname'] = $urlname; //搜索时在page.php页面拼接的地址

        //得到要显示的数据的总条数
        $sql = "select count(*) as total from " . $table_name .$where;
        $result = query($link, $sql);
        $total = $result[0]['total'];
        $arr['total'] = $total;//要查询的表的总记录的数量
        //每页显示的记录数
        $num = PAGE_NUM;
        $arr['num'] = $num; //每页要显示的记录数量
        //总页数 = ceil(总条数 / 总页数)
        $total_page = ceil($total / $num);
        $arr['total_page'] = $total_page;
        //当前页码
        $page = isset($_GET['page']) ? (int)$_GET['page'] : 1;

        //限制页码的范围 (1,$total_page)
        // 如果页码0小于1,则$min=1;1 < $total_page(总页数),则$page=1
        // 如果页码10大于$total_page,则$min=10;10 > $total_page(总页数),则$page=$total_page
        $min = max(1, $page);
        $page = min($min, $total_page);
        $arr['page'] = $page;//获得真正的当前页码
        //获取偏移量 (当前页码 - 1) * 每页的显示量
        $offset = ($page - 1) * $num;
        $arr['offset'] = $offset;
        //上一页和下一页的页码
        $prev = $page - 1;
        $next = $page + 1;
        $arr['prev'] = $prev;
        $arr['next'] = $next;
        //制作数字页码
        $num_link = '';

        //制作数字页码的开始与结束
        $start = $page - 2;
        $end = $page + 2;

        //限制开始与结束页码
        $start = max(1, $start);
        $end = min($total_page, $end);

        for($i = $start; $i <= $end; $i++){
            if($page == $i){
                $num_link .= '<li class="active"><a href="./index.php?page='.$i.$urlname.'" >'.$i.'</a></li>';
                continue;
            }
            $num_link .= '<li><a href="./index.php?page='.$i.$urlname.'" >'.$i.'</a></li>';
        }
        $arr['num_link'] = $num_link;
        //准备sql语句
        $sql = "select ".$field_name." from ".$table_name . $where ." limit  $offset,$num";

        //执行sql语句
        $result = query($link, $sql);
        $arr['result'] = $result;
        //获取受影响行数,也就是每页的记录数
        $row = mysqli_affected_rows($link);
        $arr['row'] = $row;
        return $arr;
    }



    /**
     * 上传文件
     * @param $file 表单file字段中name值
     * @param $size  上传文件的最大值
     * @param $type   可以上传的文件类型
     * @param $uploads 上传文件保存的路径
     * @return   返回上传文件的完整保存路径
     */
    function uploadFile ($file = 'myFile', $size = '10485760', $type = array("image", "text"), $uploads = './uploads')
    {
        //判断表单是否为空
        if(empty($_FILES)){
            echo '请检查表单属性';
            return false;
        }
        // 获取上传文件的名字, 类型, 临时存放位置, 上传成功与否, 上传文件大小
        $fileName = $_FILES[$file]['name'];
        $fileType = $_FILES[$file]['type'];
        $fileTmpName = $_FILES[$file]['tmp_name'];
        $fileError = $_FILES[$file]['error'];
        $fileSize = $_FILES[$file]['size'];
        // 上传出现错误的原因
        if($fileError > 0){
            switch($fileError){
                case 1:
                    echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
                    break;
                case 2:
                    echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
                    break;
                case 3:
                    echo '文件只有部分被上传';
                    break;
                case 4:
                    echo '没有文件被上传';
                    break;
                case 6:
                    echo '找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进';
                    break;
                case 7:
                    echo '文件写入失败。PHP 5.1.0 引进';
                    break;
            }
            return false;
        }
        //判断上传文件的大小是否超过上限
        if($fileSize > $size){
            echo '上传文件过大';
            return false;
        }
        //获取上传文件的文件类型 $mainType,,判断是否在 $type中存在
        list($mainType) = explode('/',$fileType);
        if(!in_array($mainType,$type)){
            echo '无法上传此类型的文件';
            return false;
        }
        //获取上传文件的后缀
        $ext = pathinfo($fileName,PATHINFO_EXTENSION);
        //设置上传文件的保存名字
        $saveName = date('Ymd').uniqid().mt_rand(0,100).".".$ext;
        //生成保存路径
        $savePath = rtrim($uploads,'/').'/'.date('Y/m/d').'/';
        //如果路径不存在,就新建
        if(!file_exists($savePath)){
            mkdir($savePath,0777,true);
        }
        //生成保存文件的完整路径
        $saveFile = $savePath . $saveName;
        //上传文件
        if(move_uploaded_file($fileTmpName,$saveFile)){
            //echo '上传成功';
            return $saveFile;
        }else{
            //echo '上传失败';
            return false;
        }
    }


    /**
     * 缩放图片
     * [zoomImg description]
     * @param  [type]  $imgfile [description] 图片路径
     * @param  integer $zoom_w  [description] 缩略图宽
     * @param  integer $zoom_h  [description] 缩略图高
     * @return [type]           [description] 返回缩略图路径
     */
    function zoomImg ($imgfile, $zoom_w = 200, $zoom_h = 200)
    {
        // 得到图片信息
        $imginfo = getimagesize($imgfile);

        if(!$imginfo){
            echo '图片非法';
            return false;
        }

        // 得到原图片宽和高
        list($source_w, $source_h) = $imginfo;

        // 设置缩略图的宽和高
        if($source_w > $source_h){
            $zoom_h = $zoom_w / $source_w * $source_h;
            $pre = $zoom_w;
        }else{
            $zoom_w = $zoom_h / $source_h * $source_w;
            $pre = $zoom_h;
        }

        // 得到原图片的类型
        $mime = $imginfo['mime'];
        list($type, $subtype) = explode('/',$mime);

        //合并打开图片和保存图片的函数
        $open_img = 'imagecreatefrom' . $subtype;
        $save_img = 'image' . $subtype;

        //打开图片
        $img = $open_img($imgfile);

        //创建缩略图画布
        $zoom_img = imagecreatetruecolor($zoom_w, $zoom_h);

        //缩放图片

        imagecopyresampled($zoom_img, $img, 0, 0, 0, 0, $zoom_w, $zoom_h, $source_w, $source_h );

        //保存图片
        $save_img_name = dirname($imgfile).'/'.$pre .'_'. basename($imgfile);
        $save_img($zoom_img, $save_img_name);

        // 关闭资源
        imagedestroy($img);
        imagedestroy($zoom_img);

        return $save_img_name;

    }

    function get_img_url($url, $basename, $size=250)
    {
        switch ($size) {
            case 350:
                $pre = '350_';
                break;
            case 250:
                $pre = '250_';
                break;
            case 150:
                $pre = '150_';
                break;
            case 50:
                $pre = '50_';
                break;
            case 30:
                $pre = '30_';
                break;
            default:
                $pre = null;
                break;
        }

        $imgpath = rtrim($url,'/').'/';
        $imgpath .= substr($basename,0,4).'/';
        $imgpath .= substr($basename,4,2).'/';
        $imgpath .= substr($basename,6,2).'/';
        $imgpath .= $pre .$basename;

        return $imgpath;
    }


    /**
     * 多个文件上传
     * @param $file 表单里file的name值
     * @return 把多个保存文件的完整路径保存到数组中,返回这个数组
     */
    function uploadFiles ($file,$path){

        //判断表单是否为空
        //<form action="./upload4.php" method="post" enctype="multipart/form-data">
        //<input type="file" name="myFile[]" multiple="multiple">
        if(empty($_FILES)){
            echo '请检查表单属性';
            return false;
        }
        //得到上传的总文件数目
        $len = count($_FILES[$file]['name']);
        //for循环上传文件,几个文件就循环几遍;
        for($i = 0; $i < $len; $i++){
            foreach($_FILES[$file] as $key => $value){
                $_FILES[$file.$i][$key] = $value[$i];
            }
        }
        //删除$_FILES中的第一条数据;两个方法作用相同;
        //array_shift($_FILES);
        unset($_FILES[$file]);
        foreach($_FILES as $key => $value){
            $name[] = uploadFile($key,10485760,array('image'),$path);
        }
        return $name;
    }
?>